package juego.sprites;

public class Criatura extends EntidadMovil {
	
	public final int ESTADO_NORMAL = 0;
	public final int ESTADO_MURIENDO = 1;
	public final int ESTADO_MUERTO = 2;
	
	private int estado;
	private Animacion animMuerteIzq;
	private Animacion animMuerteDer;
	
	public Criatura(boolean animDiagonales, int duracionEtapaAnim) {
		super(animDiagonales, duracionEtapaAnim);
		this.estado = ESTADO_NORMAL;
		this.animMuerteIzq = new Animacion(duracionEtapaAnim);
		this.animMuerteDer = new Animacion(duracionEtapaAnim);
		
	}
	
	public Criatura(int posX, int posY, boolean animDiagonales, int duracionEtapaAnim) {
		super(posX, posY, animDiagonales, duracionEtapaAnim);
		this.estado = ESTADO_NORMAL;
		this.animMuerteIzq = new Animacion(duracionEtapaAnim);
		this.animMuerteDer = new Animacion(duracionEtapaAnim);
	}
	
	public Criatura(int posX, int posY, float velocidadMovimiento, boolean animDiagonales, int duracionEtapaAnim) {
		super(posX, posY, velocidadMovimiento, animDiagonales, duracionEtapaAnim);
		this.estado = ESTADO_NORMAL;
		this.animMuerteIzq = new Animacion(duracionEtapaAnim);
		this.animMuerteDer = new Animacion(duracionEtapaAnim);
	}
	
	@Override
	public void actualizarAnimacion(double dt) {
		if (estado == ESTADO_NORMAL) {
			super.actualizarAnimacion(dt);
		} else if (estado == ESTADO_MURIENDO) {
			if ((getVelocidadX() <= 0) && (animMuerteIzq.getNumEtapas() > 0)) {
				if (animMuerteIzq.actualizarSinRepetir(dt)) {
					estado = ESTADO_MUERTO;
				}
			} else if ((getVelocidadX() <= 0) && (animMuerteIzq.getNumEtapas() == 0)) {
				estado = ESTADO_MUERTO;
			}
			if ((getVelocidadX() > 0) && (animMuerteDer.getNumEtapas() > 0)) {
				if (animMuerteDer.actualizarSinRepetir(dt)) {
					estado = ESTADO_MUERTO;
				}
			} else if ((getVelocidadX() > 0) && (animMuerteDer.getNumEtapas() == 0)) {
				estado = ESTADO_MUERTO;
			}
		}
	}
	
	public boolean isMuerto() {
		return (estado == ESTADO_MUERTO);
	}
	
	@Override
	public void gestionarColisionMapaX() {
		setVelocidadX(0);
		getAceleracion().setX(-getAceleracion().getX());
	}
	
	@Override
	public void gestionarColisionMapaY() {
		setVelocidadY(0);
		getAceleracion().setY(-getAceleracion().getY());
	}

	public int getEstado() {
		return estado;
	}

	public void setEstado(int estado) {
		this.estado = estado;
	}

	public Animacion getAnimMuerteIzq() {
		return animMuerteIzq;
	}

	public void setAnimMuerteIzq(Animacion animMuerteIzq) {
		this.animMuerteIzq = animMuerteIzq;
	}

	public Animacion getAnimMuerteDer() {
		return animMuerteDer;
	}

	public void setAnimMuerteDer(Animacion animMuerteDer) {
		this.animMuerteDer = animMuerteDer;
	}
	
	
	
}
